A computer system typically uses an operating system to control its resources. An operating system can interface with a user in several ways, including using command lines, such as in the MS-DOS operating system provided by Microsoft, Inc. or graphics user interfaces (GUI), such as in the Macintosh operating system provided by Apple, Inc. An operating system typically handles input, output and internal data by organizing the data into one or more formats which can be easily manipulated by the operating system.
Frame-based operating systems perform similar functions to other operating systems, but are distinguished in that data is stored in a specialized object format known as "frames." A frame is an object containing a collection of named data references called slots which can be accessed by the user. The frames are interconnected in a hierarchical structure, such as in a semantic network. Frame-based operating systems are well-suited for object-oriented programming languages, since objects can be directly associated with frames.
Various programming languages can be used to create programs to perform specified tasks. Some programming languages are of a compiled type, while others are of an interpretive type. A compiled program is first input by a user in a user-readable high-level source code format. The source code is then compiled by a compiler into machine-readable object code. At run time, the operating system uses the compiled code of the program linked with functions of the operating system to perform the desired tasks. A major advantage of compiled code is its relatively high speed of execution due to the fact that it is machine-readable.
Another type of programming language is an interpretive language. When implementing an interpretive language, an interpreter deciphers high-level source code into a machine language format. The interpreter therefore translates the source code into machine-readable code, links the program with other programs, and executes the instructions all at run time on an instruction-by-instruction basis. Thus, no separate listing of object code is generated and stored. Advantages of interpreted programming languages over compiled languages include portability to different types of computers and operating systems, since only the interpreter must be made specific for each type of computer. Other advantages include greater debugging abilities at run time, simpler implementation, and less storage space requirements for the interpreter.
Interpretive languages, such as BASIC, can be advantageous in offering a more direct link between a user's source code and the execution of the program. The user can often learn, for example, if a line of source code includes a syntax error as soon as the line is entered.
In some implementations of programming languages, a hybrid of compiled and interpreted languages is used. Source code is first compiled into an intermediate compiled code which is not machine code. An interpreter then interprets the intermediate compiled code at run time to execute the instructions of the program. Such a compiled, interpretive (intermediate) code is different from source code, since the intermediate code cannot typically be deciphered easily by humans as can source code. An advantage to compiling an intermediate code and interpreting the intermediate code is that greater execution speed is realized when interpreting intermediate code rather than interpreting source code. Memory space on the computer system is also conserved by using an interpreter, which is often important with portable computer systems. In addition, portability to different platforms is encouraged. For example, if a source code listing is compiled into an intermediate code, then only an interpreter is required for each different computer platform to execute the intermediate code.
Decompilers are programs which essentially reverse the compilation process. That is, object code is decompiled into the original source code which can then be easily read by a user. Decompilers are typically difficult to implement since specific knowledge about a compiler is required and it is often hard to reconstruct the exact language and logic of the source code. Decompilers are not needed for interpretive languages since the source code is already available, i.e. it was never compiled.
A relatively new form of computer, the pen-based computer system, holds forth the promise of a marriage of the power of a general purpose computer with the functionality and small size of a personal organizer. A pen-based computer system is typically a small, hand-held computer where the primary method for inputting data includes a "pen" or stylus which is engaged with a touch-sensitive screen of the computer. A pen-based computer system is commonly housed in a generally rectangular enclosure, and is provided with a dual-function display assembly that can serve as both an input device and an output device. When operating as an input device or "tablet", the display assembly senses the position and/or pressure of the tip of a stylus on the viewing screen and provides this positional or other information to the computer's central processing unit (CPU). When operating as an output device, the display assembly presents computer-generated images on the screen.
A pen-based computer available on the market is the Newton from Apple Computer, Inc. The Newton uses a frame-based operating system to create an object-oriented operating environment. NewtonScript.TM., provided by Apple Computer, Inc., is an object-oriented programming language which makes use of the frame system on the Newton. The Newton Tool Kit, also provided by Apple Computer, Inc., is an integrated environment for developing Newton applications. The NewtonScript language implements a hybrid of both compiled and interpreted languages. The compiler compiles NewtonScript source code into intermediate byte codes. These byte codes are then interpreted by the Newton operating system at run time and are executed as an interpretive language.
Debugging tools used for the Newton, such as Inspector.TM. by Apple Computer, Inc., can be used to debug the interpretive byte codes at execution time. This type of debugging is limited to checking and displaying variable and argument values, printing out contents of memory, and similar functions. Often, however, a user has need for the original source code of a compiled listing of byte codes to effectively debug a program. Such source code may not be available in many cases. Useful debugging tools which can provide source code are required if robust, well-written software code is to be produced for the computer.
A debug tools that has been marketed for the Newton is ViewFrame.TM., by Jason Harper. ViewFrame displays debugging information from a program which the Inspector debugger is not capable of displaying, such as during testing of serial communications. However, the ViewFrame program does not provide the original source code from a compiled byte code listing.